<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body{
            padding-bottom: 800px;
        }
        .box{
            border: 1px solid black;
            padding: 20px;
        }
    </style>
</head>
<body>
    <div id="app" class="box">
        <h4>父组件</h4>
        <comp-one></comp-one>
        <br>
        <comp-two></comp-two>
    </div>

    <script type="text/x-template" id="compOne">
        <div class="box">
            <h4>子组件A</h4>
            <p>msg:{{ msg }}</p>
            <input type="button" value="绑定事件-第一" @click="bindEvent()">
        </div>
    </script>
    <script type="text/x-template" id="compTwo">
        <div class="box">
            <h4>子组件B</h4>
            <p>msg:{{ msg }}</p>
            <input type="button" value="触发事件-第二" @click="emitEvent()">
        </div>
    </script>

    <script type="module"> 
        import Vue from "../../assets/vue2/vue.esm.browser.js";

        // vm.$root 是vue2 提供在任何组件中都可以直接访问到的根组件实例对象
        // vue2中任何一个组件实例对象都可以作为事件中转的存储对象
        //      vm.$on  在一个指定的vue实例上绑定自定义事件
        //      vm.$emit 在一个指定的vue实例上触发自定义事件

        Vue.component("CompOne",{
            template:"#compOne",
            data() {
                return {
                    msg: ""
                }
            },
            methods: {
                bindEvent() {
                    // this.$root 是vue2 提供在任何组件中都可以直接访问到的根组件实例对象
                    this.$root.$on("updateMsg",(e)=>{
                        this.msg = e;
                    })
                    console.log(this.$root)
                }
            },
        })
        Vue.component("CompTwo",{
            template:"#compTwo",
            data() {
                return {
                    msg:"组件B的数据msg"
                }
            },
            methods: {
                emitEvent() {
                    console.log(this.$root)
                    this.$root.$emit("updateMsg",this.msg)
                }
            },
        })

        new Vue({
            el:"#app",
            data(){
                return {
                    name:"new Vue 的Root组件"
                }
            }
        });
    </script>
</body>
</html>